﻿using System;
using System.Collections.Generic;

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WLMCoreLibrary;
using SAW_Core;
using System.Data;
using System.Data.Odbc;
using System.Text;
using System.Configuration;
using System.IO;

namespace SAW
{
    public partial class ModuloFacturacion : System.Web.UI.Page
    {
        dbConnector ConexionDB;
        protected override void OnUnload(EventArgs e)
        {
            //ConexionDB.CloseConnection();
            base.OnUnload(e);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            ConexionDB = new dbConnector();
            FuncionesLocales.CheckPagePermision(ref ConexionDB);
            FuncionesLocales.ManejarMensaje();

            if (Request.QueryString["reporteVentas"] != null)
            {
                PanelGridFactura.Visible = false;
                PanelReporteVentas.Visible = true;
            }

            if (Request["idVenta"] != null)
            {
                if (Request.QueryString["RealizarPagoCotizacion"] != null && Request.QueryString["idVenta"] != null)
                {
                    RegistrarPagoCotizacion(Convert.ToInt32(Request.QueryString["idVenta"]), Convert.ToInt32(Request.QueryString["idCuentaBancaria"]), WLMFunctions.MonedaADecimal(Request.QueryString["TotalPago"]), Convert.ToDateTime(Request.QueryString["fechaPago"]), Request.QueryString["NoDocumento"], Convert.ToInt32(Request.QueryString["TipoDeposito"]));
                }

                if (Request.QueryString["porcentajeFacturable"] != null)
                {
                    RegistrarNumeroFactura(Convert.ToInt32(Request.QueryString["idVenta"]), Convert.ToDecimal(Request.QueryString["porcentajeFacturable"]));
                }

                if (Request.QueryString["impresion"] != null)
                {
                    int idTipoStatus = Convert.ToInt32(Request.QueryString["idStatus"]);
                    GenerarPDFDocumento(Convert.ToInt32(Request.QueryString["idVenta"]), idTipoStatus, "cotizacionImpresion.xsl", true);
                }
                if (Request["email"] != null)
                {
                    EnviarCotizacionEmail(Convert.ToInt32(Request["idVenta"]), Request["mensajePersonal"]);
                }
            }


            if (Request.QueryString["listado"] == "true")
            {
                if (Request.QueryString["porProducto"] != null)
                    JSONVentasCliente(Convert.ToInt32(Request.QueryString["idCliente"]));
                else
                {
                    if (Request.QueryString["facturas"] != null)
                        ListadoFacturasXML(Convert.ToInt32(Request.QueryString["idDocumento"]));
                    else
                    {
                        if (Request.QueryString["pagos"] != null)
                            ListadoPagosXML(Convert.ToInt32(Request.QueryString["idDocumento"]));
                        else
                            ListadoVentasXML();
                    }
                }
            }
            BloquearBotonesVentas();
            if (Request["AddNew"] != null)
            {
                PanelGridFactura.Visible = false;
                PanelAltaCotizacion.Visible = true;
                FechaVencimientoVenta.Text = DateTime.Now.AddDays(15).ToString("dd/MM/yyyy");
                BloquearBotonesVentas();
                addCotizacionButton.Enabled = true;

                InitialData();

            }
            else
                if (Request.QueryString["idVenta"] != null)
                {
                    if (Request.QueryString["eliminar"] != null)
                        EliminarCotizacion(Convert.ToInt32(Request.QueryString["idVenta"]), Convert.ToInt32(Request.QueryString["idCuentaRembolso"]), Convert.ToInt32(Request.QueryString["idTipoRembolso"]));

                    idCotizacionMostrada.Value = Request.QueryString["idVenta"];
                    DetalleVenta(Convert.ToInt32(Request.QueryString["idVenta"]));
                }
        }

        protected void InitialData()
        {
            if (!IsPostBack || esDevolucion.Value == "1")
            {
                AlmacenCollection almacenes = new AlmacenCollection(ref ConexionDB);
                idAlmacenCotizacion.DataTextField = "nombre";
                idAlmacenCotizacion.DataValueField = "id";
                idAlmacenCotizacion.DataSource = almacenes.Elementos;
                idAlmacenCotizacion.DataBind();
            }
        }

        protected void GuardarVenta()
        {
            Venta venta;
            if (idCotizacionMostrada.Value == "0")
                venta = new Venta(ref ConexionDB);
            else
                venta = new Venta(Convert.ToInt32(idCotizacionMostrada.Value), ref ConexionDB);
            venta.idCliente = Convert.ToInt32(idClienteCotizacion.Value);
            venta.NombreCliente = NombreClienteCotizacion.Text;
            venta.NombreComercialCliente = NombreComercialClienteCotizacion.Text;
            venta.RFCCliente = RFCClienteVenta.Text;
            venta.F_Calle = F_CalleVenta.Text;
            venta.F_NumeroExterior = F_NumeroExteriorVenta.Text;
            venta.F_NumeroInterior = F_NumeroInteriorVenta.Text;
            venta.F_Colonia = F_ColoniaVenta.Text;
            venta.F_Municipio = F_MunicipioVenta.Text;
            venta.F_Ciudad = F_CiudadVenta.Text;
            venta.F_Estado = F_EstadoVenta.Text;
            venta.F_CP = F_CPVenta.Text;
            venta.Calle = CalleVenta.Text;
            venta.NumeroExterior = NumeroExteriorVenta.Text;
            venta.NumeroInterior = NumeroInteriorVenta.Text;
            venta.Colonia = ColoniaVenta.Text;
            venta.Ciudad = CiudadVenta.Text;
            venta.Municipio = MunicipioVenta.Text;
            venta.Estado = EstadoVenta.Text;
            venta.CP = CPVenta.Text;
            venta.FechaVencimiento = Convert.ToDateTime(FechaVencimientoVenta.Text);
            venta.TiempoEntrega = TiempoEntregaVenta.Text;
            venta.CondicionesPago = CondicionesPagoCotizacion.Text;
            venta.Observaciones = ObservacionesVenta.Text;
            venta.SubTotal = WLMFunctions.MonedaADecimal(SubTotalVenta.Text);
            venta.Descuento = WLMFunctions.MonedaADecimal(DescuentoVenta.Text);
            //cotizacion.DescuentoPorcentaje =WLMFunctions.MonedaADecimal( DescuentoPorcentaje.Text);
            venta.IVA = WLMFunctions.MonedaADecimal(IVAVenta.Text);
            venta.Total = WLMFunctions.MonedaADecimal(TotalVenta.Text);
            venta.idListaPrecios = Convert.ToInt32(idListaPreciosCotizacion.Value);
            venta.idCondicionesPago = Convert.ToInt32(idCondicionesPagoCotizacion.Value);
            venta.DiasCredito = new Condicionespago(venta.idCondicionesPago, ref ConexionDB).dias;
            venta.IdAlmacen = Convert.ToInt32(idAlmacenCotizacion.SelectedValue);

            int NumeroConceptos = Convert.ToInt32(Request["cantidadConceptosCotizacion"]);
            for (int x = 1; x <= NumeroConceptos; x++)
            {
                GuardarConcepto(venta, x);

            }

            //Actualizando el saldo y pagos
            if (idCotizacionMostrada.Value != "0")
            {
                //if (venta.SaldoPendiente > 1)
                //{
                decimal diferencia = venta.SaldoPendiente - (venta.Total - venta.SaldoPagado);
                venta.SaldoPendiente = venta.Total - venta.SaldoPagado;
                if (venta.Status > 1 && diferencia != 0)
                {
                    Cliente cliente = new Cliente(venta.idCliente, ref ConexionDB);
                    cliente.SaldoActual = cliente.SaldoActual - diferencia;
                    cliente.Save();
                }
                //}
            }
            venta.Save();

            ConexionDB.CloseConnection();
            string mensaje = "Se ha dado de alta correctamente la Venta para el cliente <b>" +
                venta.NombreCliente + "</b> por un total de <b>" +
                venta.Total.ToString("C") + "</b>";
            Session["mensajeVenta"] = mensaje;
            Session["mensaje"] = mensaje;
            ResultadoProcesoCotizacion.Text = mensaje;
            mensaje = Server.UrlEncode(mensaje);

            Response.Redirect("/ModuloVentas.aspx?procesoVenta=1&idVenta=" + venta.id);//+"&mensaje="+mensaje);

        }

        protected void GuardarConcepto(Venta venta, int x)
        {
            if (Request["idProductoConcepto" + x] != "0")
            {
                //Response.Write(Request["idProductoConcepto" + x]+Request["ConceptoEliminado" + x] + Request["cantidadConcepto" + x]);
                if (Request["ConceptoEliminado" + x] != "true" || Request["cantidadConcepto" + x] != "0")
                {
                    VentaItem item;

                    if (Request["ConceptoCotizacionId" + x] == "0")
                        item = new VentaItem(ref ConexionDB);
                    else
                    {
                        item = new VentaItem(Convert.ToInt32(Request["ConceptoCotizacionId" + x]), ref ConexionDB);

                        decimal cantidadAjuste = item.Cantidad - WLMFunctions.MonedaADecimal(Request["cantidadConcepto" + x]);
                        if (venta.Status == 4)
                            if (cantidadAjuste != 0)
                            {
                                Producto producto = new Producto(item.idProducto, ref ConexionDB);
                                Almacen almacen = new Almacen(venta.IdAlmacen, ref ConexionDB);
                                ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDB);
                                MovimientoStock movimiento = new MovimientoStock(ref ConexionDB);
                                movimiento.stockInicial = stock.Stock;
                                stock.Stock += cantidadAjuste;
                                movimiento.stockFinal = stock.Stock;

                                if (cantidadAjuste > 0)
                                {
                                    movimiento.entrada = true;
                                    movimiento.cantidadEntrada = cantidadAjuste;
                                }
                                else
                                {
                                    movimiento.salida = true;
                                    movimiento.cantidadSalida = Math.Abs(cantidadAjuste);
                                }
                                movimiento.idProducto = producto.id;
                                movimiento.idAlmacen = almacen.id;
                                movimiento.idVenta = venta.id;
                                movimiento.fechaAplicacion = DateTime.Now;
                                movimiento.idCliente = venta.idCliente;
                                movimiento.TipoMovimiento = 4;//Devolucion
                                movimiento.Save();
                                stock.Save();
                            }
                    }


                    item.idCotizacion = venta.id;
                    item.idProducto = Convert.ToInt32(Request["idProductoConcepto" + x]);
                    item.UnidadMedida = Request["unidadConcepto" + x];
                    item.Clave = Request["claveConcepto" + x];
                    item.Categoria = Request["categoriaConcepto" + x];
                    item.Linea = Request["lineaConcepto" + x];
                    item.Marca = Request["marcaConcepto" + x];
                    item.Descripcion = Request["descripcionConcepto" + x];
                    item.Precio = WLMFunctions.MonedaADecimal(Request["precioConcepto" + x]);
                    item.Cantidad = WLMFunctions.MonedaADecimal(Request["cantidadConcepto" + x]);


                    if (Request["ConceptoCotizacionId" + x] == "0" && venta.Status == 4)
                    {
                        Producto producto = new Producto(item.idProducto, ref ConexionDB);
                        Almacen almacen = new Almacen(venta.IdAlmacen, ref ConexionDB);
                        ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDB);
                        MovimientoStock movimiento = new MovimientoStock(ref ConexionDB);
                        movimiento.stockInicial = stock.Stock;
                        stock.Stock -= item.Cantidad;
                        movimiento.stockFinal = stock.Stock;


                        movimiento.salida = true;
                        movimiento.cantidadSalida = item.Cantidad;

                        movimiento.idProducto = producto.id;
                        movimiento.idAlmacen = almacen.id;
                        movimiento.idVenta = venta.id;
                        movimiento.fechaAplicacion = DateTime.Now;
                        movimiento.idCliente = venta.idCliente;
                        movimiento.TipoMovimiento = 4;//Devolucion
                        movimiento.Save();
                        item.Status = 3;
                        stock.Save();
                    }
                    item.Save();

                }
                else
                {
                    VentaItem item;
                    item = new VentaItem(Convert.ToInt32(Request["ConceptoCotizacionId" + x]), ref ConexionDB);
                    Response.Write(x + "Eliminado");
                    item.Delete();

                    if (venta.Status == 4 && item.Status == 3)
                    {
                        Producto producto = new Producto(item.idProducto, ref ConexionDB);
                        Almacen almacen = new Almacen(venta.IdAlmacen, ref ConexionDB);
                        ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDB);
                        MovimientoStock movimiento = new MovimientoStock(ref ConexionDB);
                        movimiento.stockInicial = stock.Stock;
                        stock.Stock += item.Cantidad;
                        movimiento.stockFinal = stock.Stock;
                        movimiento.cantidadEntrada = item.Cantidad;
                        movimiento.entrada = true;
                        movimiento.idProducto = producto.id;
                        movimiento.idAlmacen = almacen.id;
                        movimiento.idVenta = venta.id;
                        movimiento.fechaAplicacion = DateTime.Now;
                        movimiento.idCliente = venta.idCliente;
                        movimiento.TipoMovimiento = 4;//Devolucion
                        movimiento.Save();
                        stock.Save();
                    }
                }
            }
        }

        protected void CargarRegistro(int idRegistro)
        {
            Venta venta = new Venta(idRegistro, ref ConexionDB);

        }

        protected void EdicionVenta(Venta venta)
        {
            NombreClienteCotizacion.Text = "cargando Cotizacion" + venta.id;
            if (!IsPostBack || esDevolucion.Value == "1")
            {
                esDevolucion.Value = "0";
                venta.GenerarArchivoXML();
                PanelAltaCotizacion.Visible = true;
                PanelGridFactura.Visible = false;
                //if (cotizacion.Status > 1)
                //    botonCotizacionDevolucion.Enabled = true;
                if (venta.Status == 1)
                    botonCotizacionAPedido.Enabled = true;
                if (venta.Status == 2)
                    botonARemision.Enabled = true;
                if (venta.Status == 3)
                    botonASalido.Enabled = true;
                idClienteCotizacion.Value = venta.idCliente.ToString();
                NombreClienteCotizacion.Text = venta.NombreCliente;
                NombreComercialClienteCotizacion.Text = venta.NombreComercialCliente;
                RFCClienteVenta.Text = venta.RFCCliente;
                F_CalleVenta.Text = venta.F_Calle;
                F_NumeroExteriorVenta.Text = venta.F_NumeroExterior;
                F_NumeroInteriorVenta.Text = venta.F_NumeroInterior;
                F_ColoniaVenta.Text = venta.F_Colonia;
                F_MunicipioVenta.Text = venta.F_Municipio;
                F_CiudadVenta.Text = venta.F_Ciudad;
                F_EstadoVenta.Text = venta.F_Estado;
                F_CPVenta.Text = venta.F_CP;
                CalleVenta.Text = venta.Calle;
                NumeroExteriorVenta.Text = venta.NumeroExterior;
                NumeroInteriorVenta.Text = venta.NumeroInterior;
                ColoniaVenta.Text = venta.Colonia;
                CiudadVenta.Text = venta.Ciudad;
                MunicipioVenta.Text = venta.Municipio;
                EstadoVenta.Text = venta.Estado;
                CPVenta.Text = venta.CP;
                FechaVencimientoVenta.Text = venta.FechaVencimiento.ToString("dd/MM/yyyy");
                TiempoEntregaVenta.Text = venta.TiempoEntrega;
                CondicionesPagoCotizacion.Text = venta.CondicionesPago;
                ObservacionesVenta.Text = venta.Observaciones;
                SubTotalVenta.Text = venta.SubTotal.ToString("C");
                InitialData();
                idAlmacenCotizacion.SelectedValue = venta.IdAlmacen.ToString();
                DescuentoVenta.Text = venta.Descuento.ToString();
                IVAVenta.Text = venta.IVA.ToString("C");
                TotalVenta.Text = venta.Total.ToString("C");
                idListaPreciosCotizacion.Value = venta.idListaPrecios.ToString();
                switch (venta.idListaPrecios)
                {
                    case 1:
                        listaPreciosCotizacion.Text = "A";
                        break;
                    case 2:
                        listaPreciosCotizacion.Text = "B";
                        break;
                    case 3:
                        listaPreciosCotizacion.Text = "C";
                        break;
                    case 4:
                        listaPreciosCotizacion.Text = "D";
                        break;
                }
                idCondicionesPagoCotizacion.Value = venta.idCondicionesPago.ToString();
                StringBuilder concep = new StringBuilder();

                string botonesActivos = botonesImpresionActivos(venta.Status);
                string botonPagoActivo = "";
                if ((venta.SaldoPendiente > 10) && venta.Status > 1 && !IsPostBack)
                {
                    botonPagoActivo = "$(document).ready(function () {" +
                        "$('#botonPagoPedido').attr('disabled',false);\n" +
                        "});";
                    totalCotizacionActualDeuda.Value = venta.SaldoPendiente.ToString("C");
                }

                Response.Write("<script>" + botonesActivos + botonPagoActivo + "</script>");

                concep.Append("<script>$(document).ready(function () {ListaPreciosCotizacionesSeleccionada=" + venta.idListaPrecios.ToString() + ";blokClientDataCot();$('#botonEnviarVenta').attr('disabled',false);$('#botonBorrarVenta').attr('disabled',false);$('#botonImprimirDocumentos').attr('disabled',false);\n");
                foreach (VentaItem item in venta.Conceptos)
                {
                    concep.Append("cargarConceptoCotizacion('" + item.id + "','" +
                        item.UnidadMedida + "','" +
                        item.Cantidad + "','" +
                        item.Clave + "','" +
                        item.Categoria + "','" +
                        item.Linea + "','" +
                        item.Marca + "','" +
                        item.Descripcion + "','" +
                        item.Precio.ToString("C") + "','" +
                        item.idProducto + "','" +
                        item.Precio + "','" +
                        item.Precio + "','" +
                        item.Precio + "');\n");
                }
                concep.Append("});\ncheckBotonesActivos('BotonesVentas');</script>");
                //CantidadConceptosCotizacion.Value = cotizacion.Conceptos.Count.ToString();
                ConceptosActuales.Text = concep.ToString();
                addCotizacionButton.Enabled = true;
                idCotizacionMostrada.Value = venta.id.ToString();
                Cliente cliente = new Cliente(venta.idCliente, ref ConexionDB);
                StringBuilder mailsEnvio = new StringBuilder();

                mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"alcliente\" rel='enviosVenta' />" + cliente.Email + "</label> <br>");
                ContactoCollection contactos = new ContactoCollection(cliente, ref ConexionDB);
                foreach (Contacto cont in contactos.Elementos)
                {
                    mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"" + cont.id + "\" rel='enviosVenta' />" + cont.Email + " </label><br>");
                }

                MailsCliente.Text = mailsEnvio.ToString();
            }

        }

        protected void DetalleVenta(int noVenta)
        {
            if (!IsPostBack)
            {
                PanelAltaCotizacion.Visible = false;
                PanelGridFactura.Visible = false;
                PanelCotizacionesDetalle.Visible = true;
                if (Session["mensajeVenta"] != null)
                    ResultadoProcesoCotizacion.Text = Session["mensajeVenta"].ToString();

                string rutaArchivos = ConfigurationManager.AppSettings["XMLCotizacionesFolder"] + noVenta.ToString("00000") + "/";
                Venta venta = new Venta(Convert.ToInt32(Request.QueryString["idVenta"]), true, ref ConexionDB);
                //if (cotizacion.Status < 4 && cotizacion.Status!=0)
                //{
                //    EdicionCompra(cotizacion);
                //    return;
                //}
                StringBuilder etiquetasProgreso = new StringBuilder();
                VentaProcesoCollection procesos = new VentaProcesoCollection(ref ConexionDB);
                int valorMaximoProceso = 0;
                foreach (VentaProceso proceso in procesos.Elementos)
                    valorMaximoProceso = proceso.id;
                int anchoProceso = 1000 / valorMaximoProceso;
                etiquetasProgreso.Append("<script>var valorMaximoProcesoVentas=" + valorMaximoProceso + ";</script><div style='position:absolute; top:12px;left:0px;'>");
                foreach (VentaProceso proceso in procesos.Elementos)
                {
                    if (proceso.id > 0)
                    {
                        etiquetasProgreso.Append("<div class='procesosVenta");
                        if (proceso.id <= venta.Status)
                            etiquetasProgreso.Append(" procesoTerminado");
                        etiquetasProgreso.Append("' style='width:" + anchoProceso + "px;'>" + proceso.nombreStatus + "</div>");
                    }
                }
                etiquetasProgreso.Append("</div>");
                progesoVentas.Text = etiquetasProgreso.ToString();

                if (venta.Status != -1)
                    botonCotizacionDevolucion.Enabled = true;
                venta.GenerarArchivoXML();
                DetalleCotizacionLabel.Text = WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + noVenta.ToString("00000") + ".xml", ConfigurationManager.AppSettings["siteURL"] + ConfigurationManager.AppSettings["XMLStyleFolder"] + ConfigurationManager.AppSettings["XSLPantalla"]);
                BloquearBotonesVentas();
                idCotizacionMostrada.Value = venta.id.ToString();
                idStatusVentaMostrada.Value = venta.Status.ToString();
                idClienteCotizacion.Value = venta.idCliente.ToString();
                //cotizaciones - pedido - remision - salida - envio
                string botonesActivos = "";
                string botonPagoActivo = "";
                if ((venta.SaldoPendiente > 10) && venta.Status > 1 && !IsPostBack)
                {
                    botonPagoActivo = "$(document).ready(function () {" +
                        "$('#botonPagoPedido').attr('disabled',false);\n" +
                        "});";
                    totalCotizacionActualDeuda.Value = venta.SaldoPendiente.ToString("C");
                }


                totalCotizacionActual.Value = venta.Total.ToString();

                if (Request.QueryString["procesoVenta"] != null)
                {
                    ResultadoProcesoCotizacion.Text = Session["mensajeVenta"].ToString();
                    if (Request.QueryString["procesoVenta"] == "error")
                        ResultadoError.Value = "error";
                }

                botonesActivos = botonesImpresionActivos(venta.Status);
                decimal saldoFacturable = venta.Total;
                FacturaCollection listaFacturasCotizacion = new FacturaCollection(venta, ref ConexionDB);
                foreach (Factura factura in listaFacturasCotizacion.Elementos)
                    saldoFacturable -= factura.Total;
                totalCotizacionActualFacturable.Value = saldoFacturable.ToString();
                if (saldoFacturable > 0 && venta.Status > 1)
                    botonesActivos = botonesActivos + "$(document).ready(function () {\n$('#botonAsignarFactura').attr('disabled',false);});\n";

                Response.Write("<script>" + botonesActivos + botonPagoActivo + "</script>");

                //Cargando los contactos de el cliente para seleccionar los mail sa donde enviar la cotizacion

                Cliente cliente = new Cliente(venta.idCliente, ref ConexionDB);
                StringBuilder mailsEnvio = new StringBuilder();

                mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"alcliente\" rel='enviosVenta' />" + cliente.Email + "</label> <br>");
                ContactoCollection contactos = new ContactoCollection(cliente, ref ConexionDB);
                foreach (Contacto cont in contactos.Elementos)
                {
                    mailsEnvio.Append("<label><input type=\"checkbox\" name=\"enviarA\" id=\"enviarA\" value=\"" + cont.id + "\" rel='enviosVenta' />" + cont.Email + " </label><br>");
                }

                MailsCliente.Text = mailsEnvio.ToString();

            }
        }

        private string botonesImpresionActivos(int Status)
        {
            string botonesActivos = "";
            switch (Status)
            {
                case 1:
                    botonCotizacionAPedido.Enabled = true;
                    botonesActivos = "$(document).ready(function () {\n" +
                        "$('#botonImprimirDocumentos').attr('disabled',false);\n" +
                        "$('#botonEnviarVenta').attr('disabled',false);" +
                        "$('#botonBorrarVenta').attr('disabled',false);" +
                        "});";
                    break;
                case 2:
                    botonARemision.Enabled = true;
                    botonesActivos = "$(document).ready(function () {\n" +
                        "$('#botonImprimirDocumentos').attr('disabled',false);\n" +
                        "$('#botonEnviarVenta').attr('disabled',false);\n" +
                        "$('#botonImprimirPedido').attr('disabled',false);\n" +
                        "$('#botonBorrarVenta').attr('disabled',false);" +
                        "});";

                    break;
                case 3:

                    botonASalido.Enabled = true;
                    botonesActivos = "$(document).ready(function () {" +
                        "$('#botonImprimirDocumentos').attr('disabled',false)\n" +
                        "$('#botonImprimirPedido').attr('disabled',false);\n" +
                        "$('#botonImprimirRemision').attr('disabled',false);\n" +
                        "$('#botonEnviarVenta').attr('disabled',false);\n" +
                        "$('#botonBorrarVenta').attr('disabled',false);" +
                        "});";

                    break;
                case 4:
                    //botonAEnvio.Enabled = true;
                    botonesActivos = "$(document).ready(function () {\n" +
                        "$('#botonImprimirDocumentos').attr('disabled',false);\n" +
                        "$('#botonImprimirPedido').attr('disabled',false);\n" +
                        "$('#botonImprimirRemision').attr('disabled',false);\n" +
                        "$('#botonImprimirSalida').attr('disabled',false);\n" +
                        "$('#botonEnviarVenta').attr('disabled',false)\n";
                    botonesActivos = botonesActivos + "});";

                    break;
                //case 5:


                //    break;                    
            }
            return botonesActivos;
        }

        private void BloquearBotonesVentas()
        {
            addCotizacionButton.Enabled = false;
            botonCotizacionAPedido.Enabled = false;
            botonAEnvio.Enabled = false;
            botonARemision.Enabled = false;
            botonASalido.Enabled = false;
            Response.Write("<script>$(document).ready(function () {$('.BotonesVentas').attr('disabled','disabled');$('#botonRepVenImprimir').attr('disabled',false);});</script>");
        }

        protected void addCotizacionButton_Click(object sender, EventArgs e)
        {
            GuardarVenta();
        }

        protected void ListadoVentasXML()
        {


            string FieldList = "SELECT C.id, DATE_FORMAT(c.FechaCreacion,'%d-%m-%Y')," +
                "CONCAT(if(status=0,\"<span class='img cancelado' title='Cancelada'> </span>\"," +
                "if(saldoPendiente<=10,\"<span class='img pagado' title='Pagada'> </span>\"," +
                "\"<span class='img dineroAlerta' title='Saldo Pendiente'> </span>\"))) as status, " +
                "S.nombreStatus,NombreCliente," +
                "NombreComercialCliente,Total,SaldoPagado," +
                //Calculando los Formatos de los saldos pendientes de cada cotizacion en funcion de la fecha de pago
                "SaldoPendiente,CONCAT(C.DiasCredito)" +
                //Calculando dias de Vencimiento de la Cotizacion
                ",CONCAT(if(C.SaldoPendiente>10,(if(C.FechaPedido>'1900-01-01',(IF(C.FechaPedido+ INTERVAL C.diasCredito DAY<NOW(),datediff(now(),C.FechaPedido+ INTERVAL C.diasCredito DAY) ,0)),0)),0)) as DiasVencidos," +
                "if(saldoPendiente<=10,'ok',IF(C.FechaPedido+ INTERVAL C.diasCredito DAY<NOW(),'critic','urgent')) as rowStatus " +
                "FROM COTIZACIONES C " +
                "LEFT JOIN Clientes CL ON CL.id=C.idCliente " +
                "LEFT JOIN Ventas_proceso S ON S.id=C.status ";

            #region filtrado
            string where = "";
            if (Request["_search"] != null)
            {
                if (Request["_search"] == "true")
                {
                    System.Xml.XmlDocument filtrosBusqueda = Newtonsoft.Json.JsonConvert.DeserializeXmlNode("{'var':" + Request.QueryString["filters"] + "}");
                    where = " WHERE C.activo=1 ";
                    foreach (System.Xml.XmlNode filtro in filtrosBusqueda.GetElementsByTagName("rules"))
                    {
                        string searchField = filtro.FirstChild.InnerText;
                        string searchToken = filtro.LastChild.InnerText;
                        switch (searchField)
                        {
                            case "id":
                                where += " AND C.id =" + searchToken + " ";
                                break;
                            //Buscando en Moneda y numeros
                            case "SaldoPagado":
                            case "Total":
                            case "SaldoPendiente":
                                where += " AND " + searchField + "=" + Convert.ToDecimal(searchToken.Replace("$", "").Replace(",", "")) + " ";
                                break;
                            //Busqueda por cadena normal
                            default:
                                where += " AND " + searchField + " LIKE '%" + searchToken + "%'";
                                break;
                        }
                    }
                }
                else where = " WHERE C.activo=1 ";
            }


            string clienteFiltrado = "";
            if (Request.QueryString["idCliente"] != null)
                clienteFiltrado = " AND idCliente='" + Request.QueryString["idCliente"] + "' ";//AND Status=4 AND SaldoPendiente>=10 ";
            if (Request.QueryString["todasCxC"] != null)
                clienteFiltrado = " AND Status=4 AND SaldoPendiente>=10 AND (C.FechaPedido BETWEEN '" + Convert.ToDateTime(Request.QueryString["fechaInicial"]).ToString("yyyy-MM-dd") + "' AND '" + Convert.ToDateTime(Request.QueryString["fechaFinal"]).AddDays(1).ToString("yyyy-MM-dd") + "') ";
            if (Request.QueryString["RepVentas"] != null)
                clienteFiltrado = " AND Status>1 AND (C.FechaPedido BETWEEN '" + Convert.ToDateTime(Request.QueryString["fechaInicial"]).ToString("yyyy-MM-dd") + "' AND '" + Convert.ToDateTime(Request.QueryString["fechaFinal"]).AddDays(1).ToString("yyyy-MM-dd") + "') ";
            clienteFiltrado = clienteFiltrado + " AND CL.activo=1 ";

            string limitarCotAntiguas = "AND ((C.status=1 AND C.fechaCreacion>SUBDATE(NOW(), INTERVAL 31 DAY)) OR (C.status>1 OR C.status=0))";
            #endregion
            //if (Request["query"] != null) where = " WHERE " + qtype + " LIKE '%" + Request["query"] + "%' AND C.idListaPrecios>=0 " + limitarCotAntiguas + " AND C.activo=1 " + clienteFiltrado;
            //else where = " WHERE C.idListaPrecios>=0 "+limitarCotAntiguas+" AND C.activo=1 " + clienteFiltrado;
            PaginacionXML paginacion = WLMFunctions.GetPaginacionXML();
            WLMFunctions.XMLGrid(FieldList,
                where,
                paginacion.SortOrder,
                paginacion.Limit,
                paginacion.DataPage,
                paginacion.RowsPerPage,
                true, true);

        }

        protected void JSONVentasCliente(int idCliente)
        {
            string FieldList = "SELECT DISTINCT C.id,id2,P.clave,CONCAT('<span title=\\\'',UPPER(P.descripcion),'\\\'>',P.descripcion,'</span>') as descrip, C.fechaCreacion, A.Nombre, CI.cantidad,CONCAT('$',CAST(Format(CI.precio,2) AS CHAR)),CONCAT('$',CAST(Format(CI.precio*CI.cantidad,2) AS CHAR)) as importe " +


                " FROM PRODUCTOS P LEFT JOIN COTIZACIONESITEMS CI ON CI.idProducto=P.id LEFT JOIN COTIZACIONES C ON C.id=CI.idCotizacion " +
                " LEFT JOIN COMPRASITEMS COI on COI.idProducto=P.id LEFT JOIN ALMACENES A ON A.id=C.idAlmacen ";
            int dataPage = Convert.ToInt32(Request["page"]);
            int rowsPerPage = Convert.ToInt32(Request["rp"]);
            string sortname = Request["sortname"];
            //if (sortname == "LimiteCreditoa")
            //    sortname = "LimiteCredito";
            //if (sortname == "precio2a")
            //    sortname = "precio2";
            //if (sortname == "precio3a")
            //    sortname = "precio3";
            string sortorder = Request["sortorder"];
            if (sortname == null) sortname = "C.id";
            if (sortorder == null) sortorder = "desc";
            string sort = "ORDER BY " + sortname + " " + sortorder;
            if (dataPage == 0) dataPage = 1;
            if (rowsPerPage == 0) rowsPerPage = 50;
            int start = ((dataPage - 1) * rowsPerPage);
            string where = "";
            string qtype = Request["qtype"];
            //if (qtype == "marca")
            //    qtype = "m.nombreMarca";
            //if (qtype == "familia")
            //    qtype = "f.nombreFamilia";
            //if (qtype == "categoria")
            //    qtype = "c.nombreCategoria";
            string tipoProductos = " AND esProductoTerminado=1 ";
            if (Request["materiaPrima"] != null)
                tipoProductos = " AND esMateriaPrima=1 ";
            if (Request["query"] != null) where = " WHERE P.activo=1 AND C.status>1  AND C.idCliente='" + idCliente + "'" + tipoProductos + " AND " + qtype + " LIKE '%" + Request["query"] + "%' ";
            else where = " WHERE P.activo=1 AND C.status>1 AND C.idCliente='" + idCliente + "'" + tipoProductos;
            string limit = "LIMIT " + start + ", " + rowsPerPage;

            string strCommand = FieldList + where + sort + " " + limit;

            WLMFunctions.JsonGrid(strCommand, FieldList, where, dataPage);
        }

        protected void ListadoPagosXML(int idVenta)
        {


            string FieldList = "SELECT P.id," +
                "DATE_FORMAT(P.FEchaRealizacion,'%d-%m-%Y')," +
                "CONCAT(F.serie,CAST(F.noFolio AS CHAR)) as folioFactura, " +
                "CASE tipoMovimiento " +
                    "WHEN 1 THEN 'Cheque' " +
                    "WHEN 2 THEN 'Transferencia' " +
                    "WHEN 3 THEN 'Efectivo' " +
                    "END as tipoMov, " +
                "B.Alias, " +
                "TotalPago " +
                "FROM cotizacionesPagos P " +
                "LEFT JOIN Facturas F ON F.id=P.idFactura " +
                "LEFT JOIN BANCOSMOVIMIENTOS M ON M.id=P.idMovimientoBancario " +
                "LEFT JOIN BANCOS B ON B.id=M.idCuentaBancaria ";

            string where = "";
            //        string qtype = Request["qtype"];

            string clienteFiltrado = "";
            clienteFiltrado = clienteFiltrado + " AND P.activo=1 ";


            where = " WHERE P.idCotizacion='" + idVenta + "' AND P.activo=1 " + clienteFiltrado;

            PaginacionXML paginacion = WLMFunctions.GetPaginacionXML();
            WLMFunctions.XMLGrid(FieldList,
                where,
                paginacion.SortOrder,
                paginacion.Limit,
                paginacion.DataPage,
                paginacion.RowsPerPage,
                true, true);


        }

        protected void ListadoFacturasXML(int idVenta)
        {


            string FieldList = "SELECT F.id, " +
                "CONCAT(serie,CAST(nofolio as CHAR)) as folioSerie," +
                "DATE_FORMAT(F.FechaFacturacion,'%d-%m-%Y')," +
                "Total," +
                "SaldoPagado," +
                "SaldoPendiente, " +
                "CONCAT(\"<a href='" + ConfigurationManager.AppSettings["siteURL"] + "printinvoice.aspx?idFactura=\",F.id,\"' target='_blank'><img src='/images/pdfmini.png'></a>\") " +
                "FROM FACTURAS F ";
            string where = " WHERE idCotizacion='" + idVenta + "' ";
            PaginacionXML paginacion = WLMFunctions.GetPaginacionXML();
            WLMFunctions.XMLGrid(FieldList,
                where,
                paginacion.SortOrder,
                paginacion.Limit,
                paginacion.DataPage,
                paginacion.RowsPerPage,
                true, true);

        }

        protected void botonCotizacionAPedido_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idVenta"] != null)
                ConvertirCotizacionAPedido(Convert.ToInt32(Request.QueryString["idVenta"]));
            ConexionDB.CloseConnection();


            Response.Redirect("/ModuloVentas.aspx?procesoVenta=1&idVenta=" + Request.QueryString["idVenta"]);
        }

        protected void ConvertirCotizacionAPedido(int noCotizacion)
        {
            Venta venta = new Venta(noCotizacion, true, ref ConexionDB);
            if (venta.Status == 1)
            {
                int idPedido = venta.ConvertirAPedido();

                Session["mensajeVenta"] = "Se ha autorizado la cotizacion #" + venta.id + " del cliente " + venta.NombreCliente + " por un total de " + venta.Total.ToString("C") + " y se genero un pedido con numero # " + venta.NoPedido + " <br><br>";//<b> El total de el pedido ha sido agregado a el saldo del cliente.</b>";
            }
        }

        protected void BotonImprimirCotizacion_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idVenta"] != null)
                GenerarPDFDocumento(Convert.ToInt32(Request.QueryString["idVenta"]), 0, "cotizacionImpresion.xsl", true);
        }

        protected string GenerarPDFDocumento(int noDocumento, int idStatusDocumento, string archivoTransformacion, bool mostrarPDF)
        {
            Venta venta = new Venta(noDocumento, true, ref ConexionDB);
            string rutaArchivos = "";
            rutaArchivos += "CotizacionesXML/" + noDocumento.ToString("00000") + "/";
            string nombreArchivo = venta.id.ToString("00000");

            PDFCreator pdf = new PDFCreator();
            //Generando un 
            string tipoPdf = "cotizacion";
            string nombreArchivoSalida = "";
            List<ParametroTransformacionXML> parametros = new List<ParametroTransformacionXML>();
            parametros.Add(new ParametroTransformacionXML("tipoImpresion", idStatusDocumento.ToString()));
            switch (idStatusDocumento)
            {
                case 1:
                    //archivoTransformacion = "cotizacionImpresion.xsl";
                    tipoPdf = "cotizacion";
                    nombreArchivoSalida = venta.id.ToString("00000");
                    break;
                case 2:
                    // archivoTransformacion = "pedidoImpresion.xsl";
                    tipoPdf = "pedido";
                    nombreArchivoSalida = venta.NoPedido.ToString("00000");
                    break;
                case 3:
                    //  archivoTransformacion = "remisionImpresion.xsl";
                    tipoPdf = "Orden de Salida";
                    nombreArchivoSalida = venta.NoRemision.ToString("00000");
                    break;
                case 4:
                    //  archivoTransformacion = "salidaImpresion.xsl";
                    tipoPdf = "salida";
                    nombreArchivoSalida = venta.NoSalida.ToString("00000");
                    break;
            }
            pdf.CrearPDFdeHTML(WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + nombreArchivo + ".xml", ConfigurationManager.AppSettings["siteURL"] + ConfigurationManager.AppSettings["XMLStyleFolder"] + archivoTransformacion, parametros), tipoPdf + "-" + nombreArchivoSalida, rutaArchivos, false, mostrarPDF);
            return ConfigurationManager.AppSettings["sitePath"] + rutaArchivos + tipoPdf + "-" + nombreArchivoSalida + ".pdf";

        }

        protected string EnviarCotizacionEmail(int idVenta, string MensajeParticular)
        {
            Venta cotizacion = new Venta(idVenta, true, ref ConexionDB);
            string rutaArchivos = "CotizacionesXML/" + cotizacion.id.ToString("00000") + "/";
            string nombreArchivo = cotizacion.id.ToString("00000");
            GenerarPDFDocumento(idVenta, 1, "cotizacionEmail.xsl", false);
            List<ParametroTransformacionXML> parametros = new List<ParametroTransformacionXML>();
            parametros.Add(new ParametroTransformacionXML("tipoImpresion", "1"));
            string archivo = "<style>" + File.ReadAllText(ConfigurationManager.AppSettings["sitePath"] + "xmlcss\\xslTrans.css") + "</style>" + WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + nombreArchivo + ".xml", ConfigurationManager.AppSettings["siteURL"] + ConfigurationManager.AppSettings["XMLStyleFolder"] + "documentoEmail.xsl", parametros);
            string[] archivos = new string[1];
            archivos[0] = archivo;

            Cliente cliente = new Cliente(cotizacion.idCliente, ref ConexionDB);
            string Mensaje = "Saludos " + cliente.RazonSocial + " [" + cliente.NombreComercial + "]" + ", enviamos la cotizacion No. " + cotizacion.id + " para su evaluacion.<br><br>" + MensajeParticular + "<br><br>" + archivo;
            List<MailBox> listaMails = new List<MailBox>();
            string[] listadoContactos = Request["destinatarios"].ToString().Split('|');
            if (listadoContactos[0] == "alcliente")
                listaMails.Add(new MailBox(cliente.NombreComercial, cliente.Email));
            for (int x = 0; x < listadoContactos.Length; x++)
            {
                int sali = 0;
                if (WLMFunctions.TryParseToInt(listadoContactos[x].ToString(), out sali))
                {
                    Contacto cont = new Contacto(Convert.ToInt32(listadoContactos[x]), ref ConexionDB);
                    listaMails.Add(new MailBox(cont.Nombre + " " + cont.Apellidos, cont.Email));
                }

            }
            if (CurrentSystemUser.IdUsuario != 0)
                listaMails.Add(new MailBox(CurrentSystemUser.Email, CurrentSystemUser.Email));
            Mailer.Send(listaMails, "Envio de cotizacion", Mensaje, null);
            StringBuilder emailsEnviados = new StringBuilder();
            foreach (MailBox ma in listaMails)
                if (ma.Nombre != ma.Email)
                    emailsEnviados.Append(ma.Nombre + " [" + ma.Email + "]<br/>");
                else
                    emailsEnviados.Append(ma.Nombre + "<br/>");
            ConexionDB.CloseConnection();
            Response.Write("<script>parent.MostrarAlerta('Mensajes de Email enviados a:<br>" + emailsEnviados.ToString() + "');</script>");
            Response.End();
            return "";
        }

        protected void botonARemision_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idVenta"] != null)
            {
                Venta cotizacion = new Venta(Convert.ToInt32(Request.QueryString["idVenta"]), true, ref ConexionDB);
                if (cotizacion.Status == 2)
                {
                    ResultadoProcesoVenta resultado = cotizacion.GenerarRemision();
                    ConexionDB.CloseConnection();
                    if (resultado.Error)
                    {
                        StringBuilder salida = new StringBuilder();
                        salida.Append("El Pedido no puede ser surtido debido a que no se cuenta con todos los productos en almacen. <br> <b>Registre Compras para los productos faltantes:</b><br><br><br>");
                        foreach (string prod in resultado.Items)
                            salida.Append("- " + prod + "<br>");
                        Session["mensajeVenta"] = salida.ToString();
                        //ConexionDB.CloseConnection();
                        Response.Redirect("/ModuloVentas.aspx?procesoVenta=error&idVenta=" + Request.QueryString["idVenta"]);
                    }
                    else
                    {
                        //ConexionDB.CloseConnection();
                        Session["mensajeVenta"] = "Se ha convertido el pedido #" + cotizacion.NoPedido + " del cliente " + cotizacion.NombreCliente + " por un total de " + cotizacion.Total.ToString("C") + " en una orden de Salida con numero #" + resultado.NoRemision + " <br><br>";
                        Response.Redirect("/ModuloVentas.aspx?procesoVenta=1&idVenta=" + Request.QueryString["idVenta"]);
                    }


                }

            }
        }

        protected void botonASalido_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["idVenta"] != null)
            {
                Venta cotizacion = new Venta(Convert.ToInt32(Request.QueryString["idVenta"]), true, ref ConexionDB);
                if (cotizacion.Status == 3)
                {
                    ResultadoProcesoVenta resultado = cotizacion.GenerarSalida();
                    ConexionDB.CloseConnection();
                    if (resultado.Error)
                    {
                        StringBuilder salida = new StringBuilder();
                        salida.Append("El Pedido no puede ser surtido debido a que no se cuenta con todos los productos en almacen. <br> <b>Registre Compras para los productos faltantes:</b><br><br><br>");
                        foreach (string prod in resultado.Items)
                            salida.Append(" - " + prod + "<br>");
                        Session["mensajeVenta"] = salida.ToString();
                        Response.Redirect("/ModuloVentas.aspx?procesoVenta=error&idVenta=" + Request.QueryString["idVenta"]);
                    }
                    else
                    {
                        Session["mensajeVenta"] = "Se ha convertido la Orden de Salida #" + cotizacion.NoRemision + " del cliente " + cotizacion.NombreCliente + " por un total de " + cotizacion.Total.ToString("C") + " en una Salida de Material con numero #" + cotizacion.NoSalida + " <br><br><b>Todos los Items Fueron descontados correctamente de el inventario</b><b> El total de el pedido ha sido agregado a el saldo del cliente.</b>";
                        Response.Redirect("/ModuloVentas.aspx?procesoVenta=1&idVenta=" + Request.QueryString["idVenta"]);
                    }
                }
            }
        }

        protected void RegistrarPagoCotizacion(int idVenta, int idCuenta, decimal MontoPago, DateTime fechaPago, string noDocumento, int tipoDeposito)
        {
            Venta venta = new Venta(idVenta, ref ConexionDB);
            MovimientoBancario movimiento = new MovimientoBancario(ref ConexionDB);
            CuentaBancaria cuenta = new CuentaBancaria(idCuenta, ref ConexionDB);
            Cliente cliente = new Cliente(venta.idCliente, ref ConexionDB);
            VentaPago pagoCotizacion = new VentaPago(ref ConexionDB);
            movimiento.monto = MontoPago;
            movimiento.fechaAplicacion = fechaPago;
            movimiento.descripcion = movimiento.Concepto = "Pago a Pedido No. " + venta.NoPedido + " [" + venta.NombreCliente + "]";
            movimiento.nombreDepositante = venta.NombreCliente;
            movimiento.nombreDepositario = venta.NombreCliente;
            movimiento.deposito = true;
            movimiento.retiro = false;
            movimiento.idCotizacion = venta.id;
            movimiento.NoDocumento = noDocumento;
            movimiento.idCuentaBancaria = cuenta.id;
            movimiento.TipoMovimiento = tipoDeposito;
            movimiento.Save();
            cuenta.ProcesarMovimientoBancario(movimiento);
            pagoCotizacion.SaldoAntesPago = venta.SaldoPendiente;
            venta.SaldoPendiente -= movimiento.monto;
            venta.SaldoPagado += movimiento.monto;
            venta.Save();
            pagoCotizacion.SaldoDespuesPago = venta.SaldoPendiente;
            pagoCotizacion.idCotizacion = venta.id;
            pagoCotizacion.idMovimientoBancario = movimiento.id;
            pagoCotizacion.FechaRealizacion = fechaPago;
            pagoCotizacion.TotalPago = movimiento.monto;

            cliente.SaldoActual -= movimiento.monto;
            cliente.FechaUltimoPago = movimiento.fechaAplicacion;
            cliente.Save();
            Response.Write("El Pago ha sido realizado a El Documento No. " + venta.id + " con numero de Pedido " + venta.NoPedido + "<br>Por un total de " + movimiento.monto.ToString("C") + " a la cuenta '" + cuenta.alias + "'");
            if (Request.QueryString["idFactura"] != null)
            {
                Factura factura = new Factura(Convert.ToInt32(Request.QueryString["idFactura"]), ref ConexionDB);
                factura.SaldoPendiente -= Convert.ToDouble(pagoCotizacion.TotalPago);
                factura.SaldoPagado += Convert.ToDouble(pagoCotizacion.TotalPago);
                factura.Save();
                pagoCotizacion.IdFactura = factura.id;
                Response.Write("<br>la Factura " + factura.Serie + factura.NoFolio + " ha sido afectada con dicho pago.");
                movimiento.descripcion += " Factura " + factura.Serie + factura.NoFolio;
                movimiento.Save();
            }
            pagoCotizacion.Save();
            ConexionDB.CloseConnection();
            Response.End();

        }

        protected void botonCopiarCotizacion_Click(object sender, EventArgs e)
        {

        }

        protected void EliminarCotizacion(Int32 idVenta, int idCuentaRembolso, int idTipoRembolso)
        {
            Venta cotizacion = new Venta(idVenta, true, ref ConexionDB);
            Cliente cliente = new Cliente(cotizacion.idCliente, ref ConexionDB);
            //CotizacionCollection listaCotizaciones = new CotizacionCollection(cliente,ref ConexionDB);
            //decimal saldoActualCliente
            //foreach (cotizacion cot in listaCotizaciones.Elementos)
            //{
            //}
            cliente.SaldoActual -= cotizacion.SaldoPendiente;
            cliente.Save();
            cotizacion.CancelarCotizacion(idCuentaRembolso, idTipoRembolso);
            ConexionDB.CloseConnection();
            string mensaje = "La cotizacion ha sido eliminada del sistema y el saldo ha sido eliminado del cliente";
            Response.Redirect("/ModuloVentas.aspx?mensaje=" + mensaje);
        }

        protected void botonCotizacionDevolucion_Click(object sender, EventArgs e)
        {
            Venta venta = new Venta(Convert.ToInt32(idCotizacionMostrada.Value), true, ref ConexionDB);
            PanelCotizacionesDetalle.Visible = false;
            PanelAltaCotizacion.Visible = true;
            PanelGridFactura.Visible = false;
            esDevolucion.Value = "1";
            InitialData();
            EdicionVenta(venta);


        }

        protected void RegistrarNumeroFactura(int idVenta, decimal porcentaje)
        {
            Venta venta = new Venta(idVenta, true, ref ConexionDB);

            decimal porcentajeFacturar = porcentaje / 100;
            ResultadoProcesoVenta res = venta.Facturar(porcentajeFacturar);

            ConexionDB.CloseConnection();
            Response.Write("<a href='" + res.Mensaje + "' target='_blank'>Descargar Factura</a>");
            Response.End();

        }

    }
}